include:
  - local: .gitlab/ci/global.gitlab-ci.yml
  - local: .gitlab/ci/rules.gitlab-ci.yml

.rules:dont-interrupt:
  rules:
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
      allow_failure: true
    - if: $CI_MERGE_REQUEST_IID
      when: manual
      allow_failure: true

#######################
# rspec job base specs
.rails-job-base:
  extends:
    - .default-retry
    - .default-before_script
    - .rails-cache

.base-script:
  script:
    - source ./scripts/rspec_helpers.sh
    # Only install knapsack after bundle install! Otherwise oddly some native
    # gems could not be found under some circumstance. No idea why, hours wasted.
    - run_timed_command "gem install knapsack --no-document"
    - echo -e "\e[0Ksection_start:`date +%s`:gitaly-test-spawn[collapsed=true]\r\e[0KStarting Gitaly"
    - section_start "gitaly-test-spawn" "Spawning Gitaly"; scripts/gitaly-test-spawn; section_end "gitaly-test-spawn"  # Do not use 'bundle exec' here
    - echo -e "\e[0Ksection_end:`date +%s`:gitaly-test-spawn\r\e[0K"

.single-db:
  variables:
    DECOMPOSED_DB: "false"

.single-db-ci-connection:
  extends: .single-db
  variables:
    CI_CONNECTION_DB: "true"

.single-db-rspec:
  extends: .single-db

.single-db-ci-connection-rspec:
  extends: .single-db-ci-connection

.praefect-with-db:
  variables:
    GITALY_PRAEFECT_WITH_DB: '1'

.rspec-base:
  extends:
    - .rails-job-base
    - .base-artifacts
  stage: test
  variables:
    RUBY_GC_MALLOC_LIMIT: 67108864
    RUBY_GC_MALLOC_LIMIT_MAX: 134217728
    RECORD_DEPRECATIONS: "true"
    GEO_SECONDARY_PROXY: 0
    SUCCESSFULLY_RETRIED_TEST_EXIT_CODE: 137
  needs:
    - job: "setup-test-env"
    - job: "retrieve-tests-metadata"
    - job: "compile-test-assets"
    - job: "detect-tests"
      optional: true
  script:
    - !reference [.base-script, script]
    # We need to exclude background migration because unit tests run with
    # spec/lib, yet background migration tests are also sitting there,
    # and they should run on their own jobs so we don't need to run them
    # in unit tests again.
    - rspec_paralellized_job "--tag ~quarantine --tag ~level:background_migration"
  allow_failure:
    exit_codes: !reference [.rspec-base, variables, SUCCESSFULLY_RETRIED_TEST_EXIT_CODE]

.base-artifacts:
  artifacts:
    expire_in: 31d
    when: always
    paths:
      - coverage/
      - crystalball/
      - deprecations/
      - knapsack/
      - query_recorder/
      - rspec/
      - tmp/capybara/
      - log/*.log
    reports:
      junit: ${JUNIT_RESULT_FILE}

.rspec-base-migration:
  script:
    - !reference [.base-script, script]
    - rspec_paralellized_job "--tag ~quarantine --tag ~zoekt"

.rspec-base-pg12:
  extends:
    - .rspec-base
    - .use-pg12

.rspec-base-pg13:
  extends:
    - .rspec-base
    - .use-pg13

.rspec-base-pg13-as-if-foss:
  extends:
    - .rspec-base
    - .as-if-foss
    - .use-pg13
  needs:
    - job: "setup-test-env"
    - job: "retrieve-tests-metadata"
    - job: "compile-test-assets as-if-foss"
    - job: "detect-tests"
      optional: true

.rspec-base-pg14:
  extends:
    - .rspec-base
    - .use-pg14

.rspec-ee-base-pg12:
  extends:
    - .rspec-base
    - .use-pg12-es7-ee

.rspec-ee-base-pg13:
  extends:
    - .rspec-base
    - .use-pg13-es7-ee

.rspec-ee-base-pg13-es8:
  extends:
    - .rspec-base
    - .use-pg13-es8-ee
    - .rails:rules:run-search-tests

.rspec-ee-base-pg13-opensearch1:
  extends:
    - .rspec-base
    - .use-pg13-opensearch1-ee
    - .rails:rules:run-search-tests

.rspec-ee-base-pg13-opensearch2:
  extends:
    - .rspec-base
    - .use-pg13-opensearch2-ee
    - .rails:rules:run-search-tests

.rspec-ee-base-pg14:
  extends:
    - .rspec-base
    - .use-pg14-es7-ee

.rspec-ee-base-pg14-es8:
  extends:
    - .rspec-base
    - .use-pg14-es8-ee
    - .rails:rules:run-search-tests

.rspec-ee-base-pg14-opensearch1:
  extends:
    - .rspec-base
    - .use-pg14-opensearch1-ee
    - .rails:rules:run-search-tests

.rspec-ee-base-pg14-opensearch2:
  extends:
    - .rspec-base
    - .use-pg14-opensearch2-ee
    - .rails:rules:run-search-tests

.db-job-base:
  extends:
    - .rails-job-base
    - .rails:rules:ee-and-foss-migration
    - .use-pg13
  stage: test
  needs: ["setup-test-env"]
# rspec job base specs
######################

############################
# rspec job parallel configs
.rspec-migration-parallel:
  parallel: 8

.rspec-background-migration-parallel:
  parallel: 4

.rspec-ee-migration-parallel:
  parallel: 2

.rspec-ee-background-migration-parallel:
  parallel: 2

.rspec-unit-parallel:
  parallel: 28

.rspec-ee-unit-parallel:
  parallel: 18

.rspec-integration-parallel:
  parallel: 12

.rspec-ee-integration-parallel:
  parallel: 6

.rspec-system-parallel:
  parallel: 28

.rspec-ee-system-parallel:
  parallel: 10
# rspec job parallel configs
############################
